home *** CD-ROM | disk | FTP | other *** search
- {$APPTYPE CONSOLE}
- {$H+,O+}
- {Based on the work of Hector Santos.}
-
- program MakePrjRes;
-
- uses
- Windows,
- SysUtils,
- IniFiles;
-
- const
- HexNibble: array [0..15] of char = '0123456789ABCDEF';
-
- function HexByte(b: byte): string;
- begin
- HexByte := HexNibble[b shr 4]+HexNibble[b AND $F];
- end; { HexByte }
-
- function HexWord(w: word): string;
- begin
- Result := HexByte(w shr 8)+HexByte(w AND $FF);
- end; { HexWord }
-
- function OptAddExtension(fName, ext: string): string;
- begin
- if Pos('.',fName) = 0
- then Result := fName+'.'+ext
- else Result := fName;
- end; { OptAddExtension }
-
- procedure MakeResource(dofFile, icoFile, rcFile: string);
- var
- rcf: text;
-
- procedure WriteVersionResource;
- var
- ini : TIniFile;
- sect : string;
- sBuild : string;
- locale : word;
- codepage: word;
- flags : string;
-
- procedure AddFlag(fl: string);
- begin
- if flags <> '' then flags := flags + ' | ';
- flags := flags + fl;
- end;
-
- begin
- // TIniFile opens file in windows dir by default!
- if Pos('\',dofFile) = 0 then dofFile := '.\'+dofFile;
- if not FileExists(dofFile) then begin
- Writeln('MakeProjectResource 1.01');
- Writeln('file ',dofFile,' does not exist!');
- Halt(1);
- end;
- ini := TIniFile.Create(dofFile);
- try
- Writeln(rcf, 'VS_VERSION_INFO VERSIONINFO');
- sect:='Version Info';
- sBuild:=ini.ReadString(sect, 'MajorVer', '1');
- sBuild:=sBuild+', '+ini.ReadString(sect, 'MinorVer', '0');
- sBuild:=sBuild+', '+ini.ReadString(sect, 'Release', '0');
- sBuild:=sBuild+', '+ini.ReadString(sect, 'Build', '0');
- Writeln(rcf, 'FILEVERSION ', sBuild);
- Writeln(rcf, 'PRODUCTVERSION ', sBuild);
- flags := '';
- if ini.ReadInteger(sect,'Debug',0) = 1 then AddFlag('VS_FF_DEBUG');
- if ini.ReadInteger(sect,'PreRelease',0) = 1 then AddFlag('VS_FF_PRERELEASE');
- if ini.ReadInteger(sect,'Special',0) = 1 then AddFlag('VS_FF_SPECIALBUILD');
- if ini.ReadInteger(sect,'Private',0) = 1 then AddFlag('VS_FF_PRIVATEBUILD');
- if flags = '' then flags := '0';
- sect:='Version Info Keys';
- Writeln(rcf, 'FILEFLAGSMASK VS_FFI_FILEFLAGSMASK');
- Writeln(rcf, 'FILEFLAGS ', flags);
- Writeln(rcf, 'FILEOS VFT_APP');
- Writeln(rcf, 'FILESUBTYPE VFT2_UNKNOWN');
- Writeln(rcf, 'BEGIN');
- Writeln(rcf, ' BLOCK "VerFileInfo"');
- Writeln(rcf, ' BEGIN');
- locale := Ini.ReadInteger(sect,'Locale',$409);
- codepage := Ini.ReadInteger(sect,'CodePage',1252);
- Writeln(rcf, ' Value "TRANSLATION", 0x',HexWord(locale),', ',codepage);
- Writeln(rcf, ' END');
- Writeln(rcf, ' BLOCK "STRINGFILEINFO"');
- Writeln(rcf, ' BEGIN');
- Writeln(rcf, ' BLOCK "',HexWord(locale),HexWord(codepage),'"');
- Writeln(rcf, ' BEGIN');
- Writeln(rcf, ' VALUE "CompanyName", "',Ini.ReadString(Sect,'CompanyName',''),' \0"');
- Writeln(rcf, ' VALUE "FileDescription", "',Ini.ReadString(Sect,'FileDescription',''),' \0"');
- Writeln(rcf, ' VALUE "FileVersion", "',Ini.ReadString(Sect,'FileVersion',sBuild),' \0"');
- Writeln(rcf, ' VALUE "InternalName", "',Ini.ReadString(Sect,'InternalName',''),' \0"');
- Writeln(rcf, ' VALUE "LegalCopyright", "',Ini.ReadString(Sect,'LegalCopyRight',''),' \0"');
- Writeln(rcf, ' VALUE "LegalTrademarks", "',Ini.ReadString(Sect,'LegalTrademarks',''),' \0"');
- Writeln(rcf, ' VALUE "OriginalFileName", "',Ini.ReadString(Sect,'OriginalFileName',''),' \0"');
- Writeln(rcf, ' VALUE "ProductName", "',Ini.ReadString(Sect,'ProductName',''),' \0"');
- Writeln(rcf, ' VALUE "ProductVersion", "',Ini.ReadString(Sect,'ProductVersion',''),' \0"');
- Writeln(rcf, ' VALUE "Comments", "',Ini.ReadString(Sect,'Comments',''),' \0"');
- Writeln(rcf, ' END');
- Writeln(rcf, ' END');
- Writeln(rcf, 'END');
- finally ini.free; end;
- end; { WriteVersionResource }
-
- procedure WriteIconResource;
- begin
- if not FileExists(icoFile) then begin
- Writeln('MakeProjectResource 1.01');
- Writeln('file ',icoFile,' does not exist!');
- Halt(1);
- end;
- Writeln(rcf,'MAINICON ICON "',icoFile,'"');
- end; { WriteIconResource }
-
- begin
- AssignFile(rcf, rcFile);
- Rewrite(rcf);
- if icoFile <> '-' then WriteIconResource;
- if dofFile <> '-' then begin
- if icoFile <> '-' then Writeln(rcf);
- WriteVersionResource;
- end;
- CloseFile(rcf);
- end; { MakeResource }
-
- procedure Usage;
- begin
- Writeln('MakeProjectResource 1.01');
- Writeln('Usage: makeprjres dof_file ico_file [rc_file]');
- Writeln(' makeprjres - ico_file [rc_file]');
- Writeln(' makeprjres dof_file - [rc_file]');
- Halt(1);
- end; { Usage }
-
- var
- dofFile: string;
- icoFile: string;
- rcFile : string;
-
- begin
- if (ParamCount < 2) or (ParamCount > 3) then Usage;
- dofFile := ParamStr(1);
- icoFile := ParamStr(2);
- if icoFile <> '-' then begin
- OptAddExtension(icoFile,'ICO');
- rcFile := ChangeFileExt(icoFile,'.RC');
- end;
- if dofFile <> '-' then begin
- OptAddExtension(dofFile,'DOF');
- rcFile := ChangeFileExt(dofFile,'.RC');
- end;
- if ParamCount = 3 then rcFile := OptAddExtension(ParamStr(3),'RC');
- MakeResource(dofFile, icoFile, rcFile);
- end.
-
-